/*
 * create:2016年4月18日 下午4:09:18
 * author:wangds  
 */
package net.wangds.comp.endpoint.http.json;

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

import net.wangds.comp.endpoint.http.AbstractHttpResponseInterpreter;
import net.wangds.comp.endpoint.http.HttpAccessContext;
import net.wangds.comp.json.JsonUtil;

/**
 * 将返回对象处理成json，并写入http应答流.
 * <p>默认字符集为“UTF8”。</p>
 * @author wangds
 *
 */
public class WriteJson2ResponseInterpreter<T> extends AbstractHttpResponseInterpreter<T> {

  private String encoding="UTF8";
  
  /**
   * The getter method of the property encoding.
   * @author wangds 2016年4月18日 下午4:14:27.
   * @return the encoding.
   */
  public String getEncoding() {
    return encoding;
  }

  /**
   * The setter method of the property encoding.
   * @param theencoding the encoding to set
   * @author wangds 2016年4月18日 下午4:14:27.
   */
  public void setEncoding(String encoding) {
    this.encoding = encoding;
  }

  /*
   * @see
   * net.wangds.comp.endpoint.http.AbstractHttpResponseInterpreter#interpreter(
   * net.wangds.comp.endpoint.http.HttpAccessContext, java.lang.Object)
   * 
   * @author wangds 2016年4月18日 下午4:09:35.
   */
  @Override
  protected void interpreter(HttpAccessContext ctx, T obj) {
    Object target = obj;
    if (ctx == null) {
      return;
    }

    HttpServletResponse resp = ctx.getResponse();

    if (resp == null) {
      return;
    }

    if (target == null) {
      target = new Object();
    }
    
    OutputStream out = null;
    try{
      out = resp.getOutputStream();
      if(out == null){
        return;
      }
      String json = JsonUtil.toJson(target);
      byte[] data = json.getBytes(this.encoding);
      out.write(data);
      out.flush();
    } catch (IOException e) {
      this.getLogger().error(e.getLocalizedMessage(),e);
    }
  }

}
